// 通用工具函数
const utils = {
    // 显示提示消息
    showMessage: function(message, type = 'info') {
        const alertDiv = document.createElement('div');
        alertDiv.className = `alert alert-${type} alert-dismissible fade show`;
        alertDiv.innerHTML = `
            ${message}
            <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
        `;
        
        const container = document.querySelector('.container');
        container.insertBefore(alertDiv, container.firstChild);
        
        // 5秒后自动消失
        setTimeout(() => {
            alertDiv.remove();
        }, 5000);
    },

    // 格式化日期时间
    formatDateTime: function(dateString) {
        const date = new Date(dateString);
        return date.toLocaleString('zh-CN', {
            year: 'numeric',
            month: '2-digit',
            day: '2-digit',
            hour: '2-digit',
            minute: '2-digit',
            second: '2-digit'
        });
    },

    // 防抖函数
    debounce: function(func, wait) {
        let timeout;
        return function executedFunction(...args) {
            const later = () => {
                clearTimeout(timeout);
                func(...args);
            };
            clearTimeout(timeout);
            timeout = setTimeout(later, wait);
        };
    }
};

// 全局错误处理
window.addEventListener('error', function(event) {
    console.error('Global error:', event.error);
    utils.showMessage('发生错误，请刷新页面重试', 'danger');
});

// 添加全局的axios错误处理
axios.interceptors.response.use(
    response => response,
    error => {
        if (error.response) {
            // 服务器返回错误状态码
            if (error.response.status === 401) {
                // 未授权，重定向到登录页面
                window.location.href = '/login';
            } else {
                utils.showMessage(error.response.data.error || '操作失败，请重试', 'danger');
            }
        } else if (error.request) {
            // 请求发送失败
            utils.showMessage('网络错误，请检查网络连接', 'danger');
        } else {
            // 其他错误
            utils.showMessage('发生错误，请重试', 'danger');
        }
        return Promise.reject(error);
    }
);

// 添加全局的CSRF保护
axios.defaults.xsrfCookieName = 'csrftoken';
axios.defaults.xsrfHeaderName = 'X-CSRFToken';

// 添加全局的请求头
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

// 页面加载完成后的通用初始化
document.addEventListener('DOMContentLoaded', function() {
    // 初始化所有工具提示
    const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
    tooltipTriggerList.map(function (tooltipTriggerEl) {
        return new bootstrap.Tooltip(tooltipTriggerEl);
    });

    // 初始化所有弹出框
    const popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
    popoverTriggerList.map(function (popoverTriggerEl) {
        return new bootstrap.Popover(popoverTriggerEl);
    });

    // 自动关闭所有警告框
    const alerts = document.querySelectorAll('.alert');
    alerts.forEach(alert => {
        setTimeout(() => {
            const bsAlert = new bootstrap.Alert(alert);
            bsAlert.close();
        }, 5000);
    });
}); 